home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-07-28 | 8.1 KB | 314 lines | [TEXT/MPS ] |
- /*
- File: Letter.cp
-
- Copyright: © 1991-1994 by Apple Computer, Inc.
- All rights reserved.
-
- Part of the AOCE Sample SMSAM Package. Consult the license
- which came with this software for your specific legal rights.
-
- */
-
-
-
- #ifndef __LETTER__
- #include "Letter.h"
- #endif
-
- #ifndef __BLJSTANDARDINCLUDES__
- #include "BLJStandardIncludes.h"
- #endif
-
- #ifndef __IOSTREAM__
- #include <iostream.h>
- #endif
-
- #ifndef __BLJOCEUTILITIES__
- #include "BLJOCEUtilities.h"
- #endif
-
- #ifndef __DEBUGGINGGEAR__
- #include "DebuggingGear.h"
- #endif
-
- #ifndef __UTILITIES__
- #include "Utilities.h"
- #endif
-
- /***********************************|****************************************/
-
- #pragma segment TLetter
-
- /***********************************|****************************************/
-
- TLetter::TLetter()
- {
- }
-
- /***********************************|****************************************/
-
- TLetter::~TLetter()
- {
- }
-
- /***********************************|****************************************/
-
- void TLetter::Minimize() {
- // Don't do anything...
- }
-
- /***********************************|****************************************/
-
- Boolean
- TLetter::LetterIsCompleted ()
- {
- return false; // the subclasses should implement this
- }
-
- /***********************************|****************************************/
-
- Boolean TLetter::SetAllUnknownRecipientStatus ( TLetter* letter, const RecipientStatusSet& status )
- {
- Boolean result = ( letter != nil );
-
- if ( letter )
- for ( RecipientTypeSet type = toRecipient ; type <= bccRecipient ; ++ type )
- for ( unsigned long index = 1 ; index <= letter->GetRecipientCount ( type ) ; ++ index )
- {
- TRecipient* recipient = letter->GetRecipient ( type, index );
-
- if ( recipient && ( recipient->GetStatus () <= cUnknown ) )
- result = result && recipient->SetStatus ( status );
- }
-
- return result;
- }
-
- /***********************************|****************************************/
-
- char ShowRecipientIfNonNil (ostream& s, const TRecipient *r)
- {
- if (r)
- r->Describe(s);
- else
- s << "nil TRecipient";
- return ' ';
- }
-
- /***********************************|****************************************/
-
- ostream& TLetter::Describe(ostream& s) const
- {
-
- s << "== TLetter ====================================================================" << endl;
-
- { TRString subject;
- BLJTime sendTime;
-
- GetSubject (subject);
- GetSendTimeStamp (sendTime);
-
- s << "Sub: " << subject << " " << sendTime << endl;
- }
-
- if (keithFlag.Flag(3)) {
- BLJLetterID letterID, replyID, conversationID;
- if (GetLetterID (letterID)) s << "LetterID:" << letterID << endl;
- if (GetReplyID (replyID)) s << "ReplyID: " << replyID << endl;
- if (GetConversationID (conversationID)) s << "ConvID: " << conversationID << endl;
- }
-
- { short index;
-
- for (index = 1; index <= GetRecipientCount (fromRecipient); index++) {
- s << " from:"; ShowRecipientIfNonNil (s, GetRecipient (fromRecipient, index)); s << endl;
- }
-
- for (index = 1; index <= GetRecipientCount (toRecipient); index++) {
- s << " to: "; ShowRecipientIfNonNil (s, GetRecipient (toRecipient, index));
- RecipientStatusSet status;
- if (GetRecipientStatus(toRecipient, index, status)) {
- s << " [[";
- switch (status) {
- case cUnknown: s << "Unknown "; break;
- case cReceived: s << "Recieved "; break;
- case cNotReceived: s << "Not-recieved "; break;
- case cTimedOut: s << "Timed-out "; break;
- default: s << "??? " << (int) status << " "; break;
- }
- s << "]]";
- }
- s << flush << endl;
- }
-
- for (index = 1; index <= GetRecipientCount (ccRecipient); index++) {
- s << " cc: "; ShowRecipientIfNonNil (s, GetRecipient (ccRecipient, index));
- RecipientStatusSet status;
- if (GetRecipientStatus(ccRecipient, index, status)) {
- s << " [[";
- switch (status) {
- case cUnknown: s << "Unknown "; break;
- case cReceived: s << "Recieved "; break;
- case cNotReceived: s << "Not-recieved "; break;
- case cTimedOut: s << "Timed-out "; break;
- default: s << "??? " << (int) status << " "; break;
- }
- s << "]]";
- }
- s << flush << endl;
- }
-
-
- for (index = 1; index <= GetRecipientCount (bccRecipient); index++) {
- s << " bcc: "; ShowRecipientIfNonNil (s, GetRecipient (bccRecipient, index));
- RecipientStatusSet status;
- if (GetRecipientStatus(bccRecipient, index, status)) {
- s << " [[";
- switch (status) {
- case cUnknown: s << "Unknown "; break;
- case cReceived: s << "Recieved "; break;
- case cNotReceived: s << "Not-recieved "; break;
- case cTimedOut: s << "Timed-out "; break;
- default: s << "??? " << (int) status << " "; break;
- }
- s << "]]";
- }
- s << flush << endl;
- }
-
- s << " Letter contains " << GetUnknownRecipientCount() << " recipients with unknown status." << endl;
- }
-
-
- if (keithFlag.Flag(3)) {
- s << "Content: " << GetContentTypeCount ( ) << " ";
-
- for ( unsigned long i = 1; i <= GetContentTypeCount () ; ++ i )
- {
- s << "'"; OutputOSType ( s, GetContentType ( i ) ); s << "' ";
- }
- s << endl;
-
- if ( GetSegmentCount( 'TEXT' ) > 0) {
-
- for (short SegmentNumber = 1; SegmentNumber <= GetSegmentCount( 'TEXT' ); ++SegmentNumber) {
- long SegmentSize;
- BLJLetterBlockType blockType;
-
- GetSegmentInfo ('TEXT', SegmentNumber, blockType, SegmentSize);
-
- s << "(" << SegmentNumber << ", "; OutputOSType(s, blockType.type); s << ", " << SegmentSize << ") ";
- }
-
- s << endl;
-
- for (SegmentNumber = 1; SegmentNumber <= GetSegmentCount('TEXT'); ++SegmentNumber)
- { long SegmentSize;
- BLJLetterBlockType blockType;
-
- GetSegmentInfo ('TEXT', SegmentNumber, blockType, SegmentSize);
-
- if (SegmentSize > 0) {
-
- switch (blockType.type) {
- case 'TEXT':
- { long offset = 0;
- char buffer[80];
- do {
- long bufferSize = 75;
- if (bufferSize > SegmentSize)
- bufferSize = SegmentSize;
- GetSegmentData ('TEXT', SegmentNumber, offset, (void *) buffer, bufferSize);
- s.write (buffer,(int) bufferSize);
- SegmentSize = SegmentSize - bufferSize;
- offset = offset + bufferSize;
- } while (SegmentSize > 0);
- }
- s << endl;
- break;
-
- case 'cTXT':
- { short scriptCode;
- long offset = 0;
- long bufferSize = sizeof(scriptCode);
- GetSegmentData ('TEXT', SegmentNumber, offset, (void *) &scriptCode, bufferSize);
- if (scriptCode != smRoman)
- s << "[script:" << scriptCode << "] ";
- SegmentSize -= sizeof(short);
- }
-
- { long offset = 2;
- char buffer[80];
- do {
- long bufferSize = 75;
- if (bufferSize > SegmentSize)
- bufferSize = SegmentSize;
- GetSegmentData ('TEXT', SegmentNumber, offset, (void *) buffer, bufferSize);
- s.write (buffer,(int) bufferSize);
- SegmentSize = SegmentSize - bufferSize;
- offset = offset + bufferSize;
- } while (SegmentSize > 0);
- }
- s << endl;
- break;
-
- case 'PICT':
- s << "(PICT segment data not shown)" << endl;
- break;
-
- case 'AIFF':
- s << "(AIFF segment data not shown)" << endl;
- break;
-
- default:
- s << "('"; OutputOSType(s, blockType.type); s << " segment data not shown)" << endl;
- break;
- }
- }
- }
- }
- } else {
- s << "Content: " << GetSegmentCount( 'TEXT' ) << " Segments NOT SHOWN." << endl;
- }
-
- DescribeSubclass(s);
-
- if (keithFlag.Flag(3)) {
- for (short index = 1; index <= GetNestedLetterCount(); ++index) {
- TLetter *nestedLetter = GetNestedLetter(index);
-
- s << *nestedLetter;
- }
- } else {
- s << "There are " << GetNestedLetterCount() << " letters nested inside this letter." << endl;
- }
-
- s << "== TLetter end =================================================================" << endl;
-
- return s;
- }
-
- /***********************************|****************************************/
-
- ostream& TLetter::DescribeSubclass(ostream& s) const
- {
- return s;
- }
-
- /***********************************|****************************************/
-
- // This probably will never be called
- ostream& TLetter::operator >> ( ostream& s ) const
- {
- s << "TLetter:'";
-
- TRString subject;
- if (GetSubject(subject))
- s << subject;
-
- s << " unknownRecpts:" << GetUnknownRecipientCount() << endl;
-
- return s;
- }
-
-